From a84eec045b77af3e1decdd501c7032556df32b87 Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Tue, 8 Jul 2003 14:40:18 +0000 Subject: [PATCH] bitkeeper revision 1.259.2.4 (3f0ad7d2Xbie4GTSEifzISudDA3zQw) get_unmapped_area.c, dom0_memory.c, dom0_core.c: Fix embarrassing bug in fix to auto direct-unmap. --- xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c | 4 ++-- .../arch/xeno/drivers/dom0/dom0_memory.c | 6 +++--- xenolinux-2.4.21-sparse/arch/xeno/mm/get_unmapped_area.c | 5 ++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c b/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c index 3377c3b3a6..5abc05d05f 100644 --- a/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c +++ b/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_core.c @@ -51,7 +51,7 @@ static struct proc_dir_entry *proc_ft; static struct proc_dir_entry *dom_list_intf; unsigned long direct_mmap(unsigned long, unsigned long, pgprot_t, int, int); -int direct_unmap(unsigned long, unsigned long); +int direct_unmap(struct mm_struct *, unsigned long, unsigned long); static unsigned char readbuf[1204]; @@ -160,7 +160,7 @@ static ssize_t dom_mem_write(struct file * file, const char * buff, copy_from_user(&mem_data, (dom_mem_t *)buff, sizeof(dom_mem_t)); - if ( direct_unmap(mem_data.vaddr, + if ( direct_unmap(current->mm, mem_data.vaddr, mem_data.tot_pages << PAGE_SHIFT) == 0 ) { return sizeof(sizeof(dom_mem_t)); } else { diff --git a/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_memory.c b/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_memory.c index 8b1ffcd5f3..7f28b37df6 100644 --- a/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_memory.c +++ b/xenolinux-2.4.21-sparse/arch/xeno/drivers/dom0/dom0_memory.c @@ -311,12 +311,12 @@ void direct_zap_page_range(struct mm_struct *mm, unsigned long address, unsigned } -int direct_unmap(unsigned long addr, unsigned long size) +int direct_unmap(struct mm_struct *mm, unsigned long addr, unsigned long size) { int count = 0, tot_pages = (size+PAGE_SIZE-1) >> PAGE_SHIFT; direct_mmap_node_t * node; struct list_head * curr; - struct list_head * direct_list = ¤t->mm->context.direct_list; + struct list_head * direct_list = &mm->context.direct_list; curr = direct_list->next; while ( curr != direct_list ) @@ -335,7 +335,7 @@ int direct_unmap(unsigned long addr, unsigned long size) while ( count < tot_pages ) { - direct_zap_page_range(current->mm, addr, PAGE_SIZE); + direct_zap_page_range(mm, addr, PAGE_SIZE); addr += PAGE_SIZE; count++; } diff --git a/xenolinux-2.4.21-sparse/arch/xeno/mm/get_unmapped_area.c b/xenolinux-2.4.21-sparse/arch/xeno/mm/get_unmapped_area.c index c4b322f9bc..2258d0160b 100644 --- a/xenolinux-2.4.21-sparse/arch/xeno/mm/get_unmapped_area.c +++ b/xenolinux-2.4.21-sparse/arch/xeno/mm/get_unmapped_area.c @@ -14,8 +14,7 @@ #include #include -extern int direct_unmap(unsigned long, unsigned long); - +extern int direct_unmap(struct mm_struct *, unsigned long, unsigned long); int init_direct_list(struct mm_struct *mm) { @@ -30,7 +29,7 @@ void destroy_direct_list(struct mm_struct *mm) while ( (curr = direct_list->next) != direct_list ) { direct_mmap_node_t *node = list_entry(curr, direct_mmap_node_t, list); - if ( direct_unmap(node->vm_start, node->vm_end - node->vm_start) != 0 ) + if ( direct_unmap(mm, node->vm_start, node->vm_end - node->vm_start) ) BUG(); } } -- 2.30.2